//
// Created by hsj on 2024-1-8.
// Windows没有fork
// waitpid非阻塞式退出进程
//

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifdef WIN32
//windows minGW64
//inet_ntop函数：_WIN32_WINNT
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0600
#include <winsock2.h>
#include <ws2tcpip.h>
//#pragma comment(lib,"ws2_32.lib")
#else
//linux  gcc
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/wait.h>
#endif
void error_handling(char *message);

int main(int argc, char *argv[]){
    int status;
    pid_t pid=fork();
    if(pid==0)//新子进程
    {
            sleep(15);
            return 18;
    }
    else
    {
            //waitpid第一个参数：等待终止的目标子进程的ID，若传递-1，则与wait函数相同，可以等待任意子进程终止。
            while (!waitpid(-1, &status, WNOHANG)) {
                sleep(3);
                puts("no block, will sleep 3sec.");
            }
            if (WIFEXITED(status))
                printf("Child send %d \n", WEXITSTATUS(status));

    }
    return EXIT_SUCCESS;
}

void error_handling(char *message){
    fputs (message, stderr);
    fputc('\n', stderr);
    exit(1);
}
